// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'

const COMMON_TABLE = {}

const COMMON_PAGE = {
  'pager-count': 9,
  'page-sizes': [10, 20, 30, 40, 50, 100],
  layout: 'slot, total, sizes, prev, pager, next, jumper',
}

const COMMON_PAGE_MINI = {
  'pager-count': 9,
  'page-sizes': [10],
  layout: 'total, prev, pager, next',
}

// ============================== 导出 WEB 表格 ============================== //

export default {
  // —————————————————————————————— 模块路径 —————————————————————————————— //

  path: { type: String, default: '' }, // 示例： '' 或 'major' 或 'major/minor'

  // —————————————————————————————— 数据属性 —————————————————————————————— //

  list: { type: Array, default: null }, // 列数据 (为空则取 path 模块的 state.list)
  param: { type: Object, default: null }, // 参数对象 (为空则取 path 模块的 state.param，分页和排序用)

  isLongList: { type: Boolean, default: null }, // 是否为长列表 (为 null 则取 path 模块的 state.INIT_CORE.WEB.IS_LONG_LIST)
  moreText: { type: String, default: '滚动加载更多' }, // 更多文本 (也可使用 <template #more> 插槽)
  finishText: { type: String, default: '已全部加载' }, // 完成文本 (也可使用 <template #finish> 插槽)

  noTable: { type: Boolean, default: false }, // 是否隐藏表格
  noPage: { type: Boolean, default: false }, // 是否隐藏分页
  idKey: { type: String, default: 'id' }, // 主键的键名
  initSort: { type: Array, default: null }, // 初始排序 (为空则取 CORE.MAP.PAGE_SORT_LIST)
  emptyText: { type: String, default: '暂无数据' }, // 空白文本 (也可使用 <template #empty> 插槽)

  hasSum: { type: Boolean, default: false }, // 是否在表尾显示合计行
  sumMethod: { type: Function, default: null }, // 自定义的合计计算方法
  sumText: { type: String, default: '合计' }, // 合计行第一列的文本

  // —————————————————————————————— 事件属性 —————————————————————————————— //

  // 切换排序、页码、分页大小时触发，不传则调用 commit('startList')
  onSort: { type: Function, default: null }, // 排序方法
  onPage: { type: Function, default: null }, // 页码方法
  onPageSize: { type: Function, default: null }, // 分页大小方法

  // 加载更多时触发，不传则调用 commit('startList', page + 1)
  onLoadMore: { type: Function, default: null }, // 加载更多方法

  // —————————————————————————————— 高度，优先级递减 —————————————————————————————— //

  height: { type: [Number, String], default: null }, // 指定高度，如 500 '500px' '50%'

  auto: { type: Boolean, default: false }, // 是否为自动高度
  full: { type: Boolean, default: false }, // 是否为填满高度 (等价于 height: 100%)

  minHeight: { type: [Number, String], default: null }, // 最小高度 (同上)
  maxHeight: { type: [Number, String], default: null }, // 最大高度 (同上)
  minFull: { type: Boolean, default: false }, // 是否最小为填满高度 (等价于 min-height: 100%)
  maxFull: { type: Boolean, default: false }, // 是否最大为填满高度 (等价于 max-height: 100%)

  fullCutHeight: { type: [Number, String], default: null }, // 满高度减掉的高度 (最终为 calc(100% - cut))
  defaultHeight: { type: [Number, String], default: 'calc(100% - 61px)' }, // 默认的高度 (减掉顶部，再冗余 1px)

  doubleHead: { type: Boolean, default: false }, // 是否为双层表头
  tripleHead: { type: Boolean, default: false }, // 是否为三层表头

  // —————————————————————————————— 尺寸属性 —————————————————————————————— //

  ...CORE.WEB.BASE.SIZE,

  miniPage: { type: Boolean, default: false }, // 是否为小型分页

  // —————————————————————————————— 原生属性 —————————————————————————————— //

  elProps: { type: Object, default: () => COMMON_TABLE }, // el-table 原生配置项
  elPageProps: { type: Object, default: () => COMMON_PAGE }, // el-page 分页原生配置项
  elPageMiniProps: { type: Object, default: () => COMMON_PAGE_MINI }, // el-page 分页原生迷你配置项
}
